home *** CD-ROM | disk | FTP | other *** search
/ Intel Web Outfitter Tool Kit 4 / Intel WebOutfitter Tool Kit Version 4.0.iso / public / Outfitter / TKM / scripts / objTI.js < prev    next >
Encoding:
Text File  |  2000-03-13  |  8.6 KB  |  268 lines

  1. <!--//--><script language="javascript">
  2. /*
  3. This file handles the installing and updating of the TKM.
  4.  
  5. File Dependencies:
  6.     objRO.js    The Request Object (ro)
  7.  
  8. Required Initialization Method:
  9.     TI_Init        Sets the this.binpath field based on the scenario and checks installation status.
  10. */
  11.  
  12. function TKMINSTALLER()
  13. {
  14.     //    Methods used to check for and control installation status
  15.     this.UpdateInstallStatus = TI_UpdateInstallStatus;
  16.     this.CheckInstall = TI_CheckInstall;
  17.     this.Install = TI_Install;
  18.     this.InstallIE = TI_InstallIE;
  19.     this.InstallNN = TI_InstallNN;
  20.     this.Init = TI_Init;
  21.  
  22.     //    Constants
  23.     this.NOT_INSTALLED = 0;
  24.     this.UPDATE_REQ = 1;
  25.     this.INSTALLED = 2;    
  26.     this.PATCH_REQ = 3;    
  27.     
  28.     this.version = '5.0.0.0';
  29.     
  30.     this.status = this.NOT_INSTALLED;
  31.  
  32.     //    Fields
  33.     var ro = new REQUESTOBJECT();
  34.     if (ro.install_inprocess)
  35.     {
  36.         // If in PATCH scenario then use the Dummy classid and FileUpdater cab
  37.         if(ro.type == 'patch')
  38.         {
  39.             this.clsid = 'ffffffff-ffff-dddd-cccc-aaaaaaaaaaaa'; // Dummy classid
  40.             this.cab = 'frupd.cab#Version=4,0,0,33';
  41.             this.jar = 'frupd.jar';
  42.         }
  43.         else
  44.         {                 
  45.             this.clsid = '8AC0DECF-701B-11D3-8EA6-009027232FFE';    //    Use the classid of the tkmupdater.dll
  46.             this.cab = 'tkm.cab#Version=5,0,0,0';
  47.             this.jar = 'tkm.jar';
  48.         }
  49.         this.install_inprocess = true;        
  50.     }
  51.     else
  52.     {
  53.         //this.clsid = '8965146F-DAE3-11D2-8EA1-009027232FFE';    //    Use the classid of the pluginchecker.dll
  54.         this.clsid = '8AC0DECF-701B-11D3-8EA6-009027232FFE';    // TKMUpdater.dll
  55.         this.install_inprocess = false;
  56.     }
  57.     
  58.     //  If we have passed in a state it is so we can persist the state through an installation process
  59.     //  and allow the user to cancel without generating an incorrect installation status.
  60.     if (ro.tkm_status) this.status = parseInt(ro.tkm_status)
  61.  
  62.     this.bootstrapInstalled = false;
  63.     this.binpath = '';
  64. }
  65.  
  66. function TI_Install()
  67. {
  68.     if (this.install_inprocess)
  69.     {
  70.         if (document.layers) this.InstallNN();
  71.         else if (document.all) this.InstallIE();
  72.     }
  73.     else
  74.     {
  75.         // If it's a Patch then attach 'type' in the query string
  76.         if(this.status == this.PATCH_REQ) var install_fr = g_sTKMRoot + 'html/install_fr.htm?type=patch&tkm_status=' + this.status + '&reset_page=' + escape(location.href);
  77.         else var install_fr = g_sTKMRoot + 'html/install_fr.htm?tkm_status=' + this.status + '&reset_page=' + escape(location.href);
  78.         if (location.search != '') install_fr += '&reset_page_qstring=' + location.search.substring(1, location.search.length);
  79.  
  80.         self.location.replace(install_fr);
  81.     }
  82. }
  83.  
  84. function TI_InstallIE()
  85. {
  86.     var sHTML = '';
  87.  
  88.     sHTML = '<object id="SelfUpdater" name="SelfUpdater" style="position:absolute; z-index:-1; visibility:hidden" ' + 
  89.         'classid="clsid:' + this.clsid + '" height="0" width="0"  codebase="' + this.binpath + this.cab + '"></object>';
  90.  
  91.     if (document.readyState == 'complete') document.body.insertAdjacentHTML('BeforeEnd', sHTML);
  92.     else document.write(sHTML);
  93.  
  94.     setTimeout('ti.UpdateInstallStatus()', 3000);
  95. }
  96.  
  97. function TI_InstallNN()
  98. {
  99.     var sHTML = '';
  100.     var jarFile = this.binpath + this.jar;
  101.     netscape.softupdate.Trigger.StartSoftwareUpdate(jarFile, netscape.softupdate.Trigger.SILENT_MODE);
  102.     setTimeout('ti.UpdateInstallStatus()', 3000);
  103. }
  104.  
  105. function TI_UpdateInstallStatus()
  106. {
  107.     // This is our "main brain" function.  This baby gets called every so often (at the time
  108.     // of it's creation it was set to every 2 seconds).  It reloads the "detection" frame which
  109.     // SHOULD get a brand spankin' new list of installed 'stuff'.  When that frames script sees the 
  110.     // bootstrap installer plugin it will then tell this page via the setLoaderStatus() function.  
  111.     // The setLoaderStatus() function sets a flag that tells this function NOT to load the plugin
  112.     // detection page, but rather the plugin launching page.  When the bootstrap installer plugin
  113.     // finishes it will cause that page to load not the plugin launching page, but a page that
  114.     // will reload this page (with this page - install_main.htm at the time of this writing).
  115.     // NOW - this page should have a brand spankin' new list of installed 'stuff' - which should
  116.     // by this time contain the stuff that the bootstrap.exe application has force fed to Navigator!!!!
  117.     //
  118.     // Next time I recommend using the built it Navigator update stuff ala SmartUpdate, instead of
  119.     // this HACK!
  120.  
  121.     if (document.layers)
  122.     {
  123.         if (!this.bootstrapInstalled)
  124.         {
  125.             parent.frames['install_detect'].location.replace(g_sTKMRoot + "html/install_detect_step1.htm");
  126.             if (this.status != this.INSTALLED) setTimeout('ti.UpdateInstallStatus()', 3000);
  127.         }
  128.         else
  129.         {
  130.             navigator.plugins.refresh(true);
  131.             parent.frames['install_detect'].location.replace(g_sTKMRoot + "html/install_detect_step2.htm");
  132.         }
  133.     }
  134.     else if (document.all)
  135.     {
  136.         if (!this.bootstrapInstalled)
  137.         {
  138.             parent.frames['install_detect'].location.replace(g_sTKMRoot + "html/install_detect_step1.htm");
  139.             if (this.status != this.INSTALLED) setTimeout('ti.UpdateInstallStatus()', 3000);
  140.         }
  141.         else
  142.         {
  143.             parent.frames['install_detect'].location.replace(g_sTKMRoot + "html/install_detect_step3.htm");
  144.         }
  145.     }
  146. }
  147.  
  148. function setLoaderStatus()
  149. {
  150.     // this is called by our other frame to inform us
  151.     // when the bootstrap plugin has been installed into netscape
  152.     // At this point, put an instance of our bootstrap plugin on the page.
  153.     ti.bootstrapInstalled = true;
  154. }
  155.  
  156. function TI_CheckInstall()
  157. {
  158.     if (document.layers)
  159.     {
  160.         /*  If the install_inprocess flag is set then just kick-off the install without checking  */
  161.         if (this.install_inprocess)
  162.         {
  163.             this.InstallNN();
  164.         }
  165.         else
  166.         {
  167.             // check for plugin thingy
  168.             for (i=0; i<navigator.mimeTypes.length; i++)
  169.             {
  170.                 if (navigator.mimeTypes[i].type == 'application/x-weboutfitter-container')
  171.                 {
  172.                     document.write('<embed type="application/x-weboutfitter-container" ' + 
  173.                         //'name="WTM" width="" height="" clsid="{' + this.clsid + '}">');
  174.                         'name="WTM" width="" height="" clsid="{8965146F-DAE3-11D2-8EA1-009027232FFE}">');
  175.                     
  176.                     var TU_ver = new String(document.WTM.callMethod1('GetVersion', 'tkmupdater.dll')) + '';
  177.                     var PC_ver = new String(document.WTM.callMethod1('GetVersion', 'FileRetriever.dll')) + '';                     
  178.                     var rVal = CompareVersions(PC_ver, this.version);
  179.                                 
  180.                     if (TU_ver == 'FILE NOT FOUND' || rVal < 0) this.status = this.UPDATE_REQ;                            
  181.                     else this.status = this.INSTALLED;
  182.  
  183.                     break;
  184.                 }
  185.             }
  186.         }
  187.     }
  188.     else if (document.all)
  189.     {
  190.         var sHTML = '';
  191.  
  192.         if (this.install_inprocess)
  193.         {
  194.             /*  If the install_inprocess flag is set then just kick-off the install without checking  */
  195.             this.InstallIE();
  196.         }
  197.         else
  198.         {    
  199.             document.write('<object id="WTMCheck" name="WTMCheck" style="position:absolute; z-index:-1; visibility:hidden" ' +
  200.             'classid="clsid:' + this.clsid + '" height=0 width=0></object>');
  201.             if (document.WTMCheck.readyState != 0)
  202.             {                            
  203.                 var TU_ver = document.WTMCheck.GetTKMFileVersion('tkmupdater.dll');
  204.                 var PC_ver = document.WTMCheck.GetTKMFileVersion('FileRetriever.dll');                                        
  205.                 var rVal = CompareVersions(PC_ver, this.version);
  206.                                         
  207.                 if (TU_ver == 'FILE NOT FOUND' || rVal < 0) this.status = this.UPDATE_REQ;                
  208.                 else this.status = this.INSTALLED;
  209.                 document.WTMCheck.FreeUnusedLibraries();                            
  210.             }
  211.         }
  212.     }
  213. }
  214.  
  215. function CompareVersions(Ver0, Ver2)
  216. {
  217.     var Ver1 = Ver0.toString();
  218.         
  219.     var aVer1 = Ver1.split(".");
  220.     var aVer2 = Ver2.split(".");
  221.     
  222.     if(aVer1.length < 2) aVer1 = Ver1.split(",");
  223.     
  224.     if(aVer2.length < 2)    aVer2 = Ver2.split(",");    
  225.  
  226.     var nVer1, nVer2;
  227.     for(var i = 0; i<4; i++)
  228.     {
  229.         nVer1 = nVer2 = 0;
  230.         if(aVer1.length > i)
  231.         {
  232.             nVer1 = Number(aVer1[i]);
  233.             if(isNaN(nVer1))    nVer1 = -1;
  234.         }
  235.         if(aVer2.length > i)
  236.         {
  237.             nVer2 = Number(aVer2[i]);
  238.             if(isNaN(nVer2))    nVer2 = -1;
  239.         }
  240.         if(nVer1 > nVer2) return 1;            
  241.         else if(nVer1 < nVer2) return -1;        
  242.     }    
  243.     return 0;
  244. }
  245.  
  246. function TI_Init(scenario)
  247. {
  248.     //    1: WOTK_SCENARIO_CD                (CD Scenario)
  249.     //    2: WOTK_SCENARIO_EQUIP_PC        (Equip Your PC Scenario)
  250.     //    3: WOTK_SCENARIO_SITE_SEEING    (Site Seeing/Theme Affiliate[TechTrek] Scenario)
  251.     //    4: WOTK_SCENARIO_INDICATOR        (Indicator Scenario)
  252.     //    5: WOTK_SCENARIO_AFFILIATE        (Persistant Branding Frame Scenario)
  253.  
  254.     var nEndPos = location.href.lastIndexOf('/');
  255.     if (scenario == 1)
  256.     {
  257.         var sPath = location.href.substring(0, nEndPos);
  258.         nEndPos = sPath.lastIndexOf('/');
  259.         this.binpath = sPath.substring(0, nEndPos) + '/bootstrap/';
  260.     }
  261.     else this.binpath = g_sTKMRoot + 'bin/';
  262.  
  263.     /*  Check the client software instalation status  */
  264.     this.CheckInstall();
  265. }
  266.  
  267. var ti = new TKMINSTALLER();
  268. //--></script>